From cbc050b9ed6708e84c0a97f327400d08512ad65f Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 20 Aug 2021 05:52:10 +0200 Subject: [PATCH] recorder: Make the render nodes in the list draggable You can (soon) drag any of the nodes directly into the node-editor. --- gtk/inspector/recorder.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/gtk/inspector/recorder.c b/gtk/inspector/recorder.c index 7b3ead81ee..7b9793b98a 100644 --- a/gtk/inspector/recorder.c +++ b/gtk/inspector/recorder.c @@ -21,6 +21,8 @@ #include #include +#include +#include #include #include #include @@ -344,15 +346,39 @@ node_name (GskRenderNode *node) } } +static GdkContentProvider * +prepare_render_node_drag (GtkDragSource *source, + double x, + double y, + GtkListItem *list_item) +{ + GtkTreeListRow *row_item; + GdkPaintable *paintable; + GskRenderNode *node; + + row_item = gtk_list_item_get_item (list_item); + if (row_item == NULL) + return NULL; + + paintable = gtk_tree_list_row_get_item (row_item); + node = gtk_render_node_paintable_get_render_node (GTK_RENDER_NODE_PAINTABLE (paintable)); + + return gdk_content_provider_new_typed (GSK_TYPE_RENDER_NODE, node); +} + static void setup_widget_for_render_node (GtkSignalListItemFactory *factory, GtkListItem *list_item) { GtkWidget *expander, *box, *child; + GtkDragSource *source; /* expander */ expander = gtk_tree_expander_new (); gtk_list_item_set_child (list_item, expander); + source = gtk_drag_source_new (); + g_signal_connect (source, "prepare", G_CALLBACK (prepare_render_node_drag), list_item); + gtk_widget_add_controller (expander, GTK_EVENT_CONTROLLER (source)); box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3); gtk_tree_expander_set_child (GTK_TREE_EXPANDER (expander), box); -- 2.30.2